package com.suiwei.advanced.file;

import java.io.File;
import java.io.IOException;
import org.junit.jupiter.api.Test;

//File类：操作系统的文件对象（文件、文件夹）
public class FileDemo {
    @Test
    void test() throws IOException {
        //File对象的创建
        //new File只是创建一个表示“路径”的对象，并不检查文件或目录是否存在，所以不会抛异常。
        //绝对路径：win系统从盘符开始；Linux以/开始
        //相对路径：相对于当前项目；不以盘符或者/开始的字符串，被判定为相对路径
        File f0 = new File("D:\\a.txt");//要用双反斜线，因为会转义
        File f1 = new File("D:/a.txt");//也可以使用斜线
        File f2 = new File("d:\\test");//文件夹
        File f3 = new File("d:\\","demo");//路径分开写
        File f4 = new File(f3,"a.txt");
        File f5 = new File("a.txt");//相对路径

        //File类的判断方法
        f0.isDirectory();//是否是文件夹
        f0.isFile();//是否是文件
        f0.exists();//文件或文件夹是否存在

        //File类的获取方法
        f0.length();//返回文件的大小（字节数量）
        f0.getAbsolutePath();//获取绝对路径
        f0.getPath();//定义文件时，使用的路径，比较鸡肋，基本没用
        f0.getName();//获取文件（带后缀）或者文件夹的名字
        f0.lastModified();//获取最后修改时间

        //File类的创建和删除方法
        f1.createNewFile();//创建文件，如果文件存在，则会返回false创建失败
        f1.mkdir();//创建一级文件夹，基本没用
        f1.mkdirs();//创建多级文件夹，只能创建文件夹，不能创建文件
        f1.delete();//删除文件或空文件夹，有文件的文件夹无法删除

        //File类的遍历方法
        File[] files = f1.listFiles();//当前目录下，所有的一级文件对象
        javaFile(f3);

    }
    //找到文件夹下，所有java文件
    //循环调用，用递归
    private void javaFile(File file){
        File[] files = file.listFiles();
        for (File file1 : files) {
            if (file1.isFile()&&file1.getName().endsWith(".java")){
                System.out.println(file1);
                System.out.println(file1.getAbsolutePath());
            }else if(file1.isDirectory()){
                javaFile(file1);
            }
        }


    }
}
